const express = require("express")
const fs = require("fs")
const path = require("path")
const router = express.Router()

// 班级列表
router.get("/", (req, res) => {
    let viewData = {
        data: []
    }
    // 第一个参数是模板名称, 第二个参数是需要传入模板中的数据
    fs.readFile(path.resolve("datas", "cdata.json"), "utf-8", (err, data) => {
        if (err) {
            return res.render("class", viewData)
        }
        if (data) {
            viewData = JSON.parse(data)
        }
        // console.log(viewData);
        res.render("class", viewData)
    })
})

router.get("/add", (req, res) => {
    res.render("class-add")
})

router.post("/", (req, res) => {
    // 拿到数据  req.body
    // 写入文件  第一个参数 文件路径（绝对） 第二个 你要写入的数据 第三个 回调函数
    // console.log(path.resolve("datas", "cdata.json"));
    // 不能写对象 ，只能写字符串  对象转为字符串
    // 注意json文件只能是一个对象 用大括号包围
    // {data: [{"电商技术二班"},{"电商技术二班"}]}
    // console.log(JSON.stringify(req.body)); 
    // console.log(typeof JSON.stringify(req.body));
    // 格式化数据
    let writeData = {
        data: [req.body]
    } 
    // console.log(writeData);
    // 分为两种情况讨论
    fs.readFile(path.resolve("datas", "cdata.json"), "utf-8", (err, data) => {
        if(err){
            return res.send({
                err: true,
                msg: "文件读取错误"
            })
        }
         // 1.第一次写入 读取文件 是不是空
        if(!data || data == ""){
            // 直接写
            fs.writeFile(path.resolve("datas", "cdata.json"),  JSON.stringify(writeData), (err) => {
                if(err){
                    return res.send({
                        err: true,
                        msg: "文件写入错误"
                    })
                }
                res.send({
                    err: false,
                    msg: "数据添加成功"
                })
            })
        } else {
            // 第二次写入
            // 字符串变为对象  JSON.parser
            let oldData = JSON.parse(data)
            oldData.data.push(req.body)
            fs.writeFile(path.resolve("datas", "cdata.json"),  JSON.stringify(oldData), (err) => {
                if(err){
                    return res.send({
                        err: true,
                        msg: "文件写入错误"
                    })
                }
                res.send({
                    err: false,
                    msg: "数据添加成功"
                })
            })
        }
    })  
})

router.put("/", (req, res) => {
    // req.body
    // console.log(req.body);
    let {id, className} = req.body
    fs.readFile(path.resolve("datas", "cdata.json"), "utf-8", (err, data) => {
        if(err){
            return res.send({
                err: true,
                msg: "读取文件错误"
            })
        }
        if(data){
            let oldData = JSON.parse(data)
            // 修改对应的数据
            oldData.data[id].className = className
            // 写入文件
            fs.writeFile(path.resolve("datas", "cdata.json"), JSON.stringify(oldData), (err) => {
                if(err){
                    return res.send({
                        err: true,
                        msg: "写入文件错误"
                    })
                }
                res.send({
                    err: false,
                    msg: "修改班级成功"
                })
            })
        } else {
            return res.send({
                err: true,
                msg: "文件为空"
            })
        }
    })
})

router.get("/edit", (req, res) => {
    // console.log(req.query);
    let id = req.query.id
    // 拿到要修改的数据的索引号，读取文件拿到数组，通过索引找到对应的数据，传递给模板
    let viewData = {
        data: {}
    }
    fs.readFile(path.resolve("datas", "cdata.json"), "utf-8", (err, data) => {
        if(err){
            res.render("class-edit", viewData)
        }
        if(data){
            // console.log(data); // 字符串
            // console.log(JSON.parse(data));
            // 通过索引拿到修改的值
            // console.log(JSON.parse(data).data[id]);
            viewData.data = JSON.parse(data).data[id]
            viewData.data.id = id
            console.log(viewData);
        }
        res.render("class-edit", viewData)
    })
    
})

router.delete("/", (req, res) => {
    // 拿到删除数据的索引号
    let { id } = req.body
    // 读取文件
    fs.readFile(path.resolve("datas", "cdata.json"), "utf-8", (err, data) => {
        if(err){
            return res.send({
                err: true,
                msg: "读取文件出错"
            })
        }
        if(data){
            let oldData = JSON.parse(data).data
            // console.log(oldData);
            // 如何删除数组中对应索引的一项
            oldData.splice(id, 1)
            console.log(oldData);
            // 把删除好的数据写入文件
            // 把数据格式组装好
            let newData = {
                data: oldData
            }
            // console.log(newData);
            fs.writeFile(path.resolve("datas", "cdata.json"), JSON.stringify(newData), (err) => {
                if(err){
                    return res.send({
                        err: true,
                        msg: "写入文件出错"
                    })
                }
                return res.send({
                    err: false,
                    msg: "删除成功"
                })
            })
        }else{
            res.send({
                err: true,
                msg: "文件为空"
            })
        }

    })
})

module.exports = router